﻿Public Class BillDetail
    Inherits CoreClass

    ' Gan gia tri cho bien MenuID de kiem tra quyen cua ng dung, gia tri nay lay trog DB va dc fix
    Dim chkMenu As Integer = getIDMenu(11)
    Dim idBill As Integer = 0
    Dim sttBill As Integer = -1

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            ' Set sự kiện submit cho nút chỉ định
            Page.Form.DefaultButton = btnAccept.UniqueID
            idBill = Request.QueryString("id")
            If Not idBill > 0 Then
                Response.Redirect("BillManager.aspx")
            End If
            ' Luôn check quyền khi load trang
            chkPms((CInt(Session("GroupId").ToString())), chkMenu)
            If Not Page.IsPostBack Then
                If chkView = 1 Then
                    loadData()
                    btnCancel.Attributes.Add("onclick", "return confirm('Bạn có chắc muốn hủy đơn hàng này không? Đơn hàng sẽ bị xóa vĩnh viễn khi hủy.');")
                Else
                    'MsgBox(chkView & chkUpdate & chkDelete)
                    objAlert.ErrorBox(Page, "Bạn không có quyền truy xuất trang này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
                End If
            End If
        Catch ex As Exception
            Response.Redirect("/Inside/xLogin.aspx?redirect=" & Request.Url.PathAndQuery.Replace("?", "|"))
        End Try
    End Sub

    Private Sub loadData()
        Try
            sql = "spi_BillGetDetail " & objFunction.ValueCheck(idBill)
            
            Dim dts As DataSet = objDataRead.ExeDataset(sql)
            Dim dtbBill As DataTable = dts.Tables(0)
            Dim dtbBillTotal As DataTable = dts.Tables(1)
            
            If dtbBill.Rows.Count < 1 Then
                objAlert.ErrorBox(Page, "Đơn hàng không tồn tại trong hệ thống.")
                Exit Sub
            End If

            ' Load data đơn hàng vào form
            lblBillID.Text = dtbBill.Rows(0).Item("BillID")
            lblName.Text = dtbBill.Rows(0).Item("BillName")
            lblEmail.Text = dtbBill.Rows(0).Item("BillEmail")
            lblAddress.Text = dtbBill.Rows(0).Item("BillAddress")
            lblPhone.Text = dtbBill.Rows(0).Item("BillPhone")
            lblDate.Text = formatTime(dtbBill.Rows(0).Item("BillDate"))
            lblDesc.Text = dtbBill.Rows(0).Item("BillDesc")
            sttBill = Integer.Parse(dtbBill.Rows(0).Item("BillStatus"))
            ' format button, tùy từng trường hợp mà hiển thị nút cho đúng
            formatBtn(sttBill)
            ' format trạng thái đơn hàng, màu sắc, text
            lblStt.Text = formatStatus(sttBill)

            ' fill chi tiết các mặt hàng vào grid
            grid2.DataSource = dts.Tables(2)
            grid2.DataBind()

            ' Lấy tổng số tiền của đơn hàng 
            lblTotal.Text = objFunction.formatVNCurrency(dtbBillTotal.Rows(0).Item("BillTotal")) & " đ"
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub


    Private Sub formatBtn(ByVal stt As Integer)
        If stt = 0 Then
            btnAccept.Visible = True
        ElseIf stt = 1 Then
            btnDelivery.Visible = True
        Else
            ' stt = 2 la da giao hang thi khong hien thi nut nao nua
        End If
    End Sub

    ' Ham hien thi ngay thang theo dang VN
    Public Function formatTime(ByVal str As String) As String
        Dim tempDate As New Date
        tempDate = CDate(str)
        Dim strDateReturn = tempDate.Day & "-" & tempDate.Month & "-" & tempDate.Year
        Dim strTimeReturn = tempDate.Hour & ":" & tempDate.Minute
        Return strDateReturn & "&nbsp;<span style=""font-style:italic;font-size:12px;color: #808080"">(" & strTimeReturn & ")</span>"
    End Function

    Function formatStatus(ByVal stt As Integer) As String
        If stt = 0 Then
            Return "<span style=""font-weight:bold;color: red;"">Chờ duyệt</span>"
        ElseIf stt = 1 Then
            Return "<span style=""font-weight:bold;color: orange;"">Đã duyệt, chưa giao hàng</span>"
        Else
            Return "<span style=""font-weight:bold;color: green;"">Đã giao hàng</span>"
        End If

    End Function

    ' Format định dạng tiền VND trên Grid
    Public Function formatCurrency(ByVal currency As String) As String
        Dim temp As Double = Double.Parse(currency)
        Return String.Format("{0:#,##0}", temp) & " đ"
    End Function


    Private Sub grid2_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grid2.RowCreated
        Try
            'Add CSS class on normal row.
            If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Normal Then
                e.Row.CssClass = "normal hand"
            End If

            'Add CSS class on alternate row.
            If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Alternate Then
                e.Row.CssClass = "alt hand"
            End If

            ' Thêm sự kiên click row để chỉnh sửa thông tin User
            If e.Row.RowType = DataControlRowType.DataRow Then
                Dim datakey As String = grid2.DataKeys(e.Row.RowIndex).Value.ToString()     'get the datakey
                e.Row.Attributes.Add("onclick", "window.open('/Inside/Web/Product/ProductDetail.aspx?id=" & datakey & "')")
            End If
        Catch ex As Exception

        End Try
    End Sub

    ' Xử lý sự kiện quay lại trang quản lý đơn hàng
    Private Sub btnBack_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBack.Click
        Response.Redirect("BillManager.aspx")
    End Sub

    ' Xử lý sự kiện xác nhận đơn hàng
    Private Sub btnAccept_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAccept.Click
        If chkUpdate = 1 Then
            Try
                sql = "spi_BillAction " & objFunction.ValueCheck(idBill) & ", " & objFunction.ValueCheck(1)

                objDataRead.ExeNonQuery(sql)
                objAlert.InfoBox(Page, "Xác nhận đơn hàng thành công", Request.Url.PathAndQuery)
                objFunction.writeLog(Session("UserId"), 1, "Xác nhận đơn hàng thành công", "Khách hàng: " & lblName.Text, "Ngày đặt hàng: " & lblDate.Text)
            Catch ex As Exception
                If objConfig.Developer.Equals("1") Then
                    objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                      " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                      " --- Mess: " & ex.Message.Replace("'", """"))
                Else
                    objAlert.ErrorBox(Page, "Có lỗi trong quá trình update. <br><br>Hãy thông báo lại cho Admin.")
                End If
            End Try

        Else
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
        End If
    End Sub

    ' Xử lý sự kiện xác nhận đã giao hàng
    Private Sub btnDelivery_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDelivery.Click
        If chkUpdate = 1 Then
            Try
                sql = "spi_BillAction " & objFunction.ValueCheck(idBill) & ", " & objFunction.ValueCheck(2)

                objDataRead.ExeNonQuery(sql)
                objAlert.InfoBox(Page, "Xác nhận giao hàng hàng thành công", Request.Url.PathAndQuery)
                objFunction.writeLog(Session("UserId"), 1, "Xác nhận giao hàng thành công", "Khách hàng: " & lblName.Text, "Ngày đặt hàng: " & lblDate.Text)
            Catch ex As Exception
                If objConfig.Developer.Equals("1") Then
                    objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                      " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                      " --- Mess: " & ex.Message.Replace("'", """"))
                Else
                    objAlert.ErrorBox(Page, "Có lỗi trong quá trình update. <br><br>Hãy thông báo lại cho Admin.")
                End If
            End Try

        Else
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
        End If
    End Sub

    ' Xử lý sự kiện Hủy / Xóa đơn hàng
    Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
        If chkDelete = 1 Then
            Try
                sql = "spi_BillAction " & objFunction.ValueCheck(idBill) & ", " & objFunction.ValueCheck(-1)

                objDataRead.ExeNonQuery(sql)
                objAlert.InfoBox(Page, "Xác nhận xóa đơn thành công", "BillManager.aspx")
                objFunction.writeLog(Session("UserId"), 0, "Xác nhận xóa đơn hàng thành công", "Khách hàng: " & lblName.Text, "Ngày đặt hàng: " & lblDate.Text)
            Catch ex As Exception
                If objConfig.Developer.Equals("1") Then
                    objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                      " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                      " --- Mess: " & ex.Message.Replace("'", """"))
                Else
                    objAlert.ErrorBox(Page, "Có lỗi trong quá trình update. <br><br>Hãy thông báo lại cho Admin.")
                End If
            End Try

        Else
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
        End If
    End Sub


End Class